package pl.peterjack.servlet.dane.klient;

import java.io.IOException;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.impl.LogFactoryImpl;

import pl.peterjack.model.PMF;
import pl.peterjack.model.dane.Firma;
import pl.peterjack.model.dane.Klient;
import pl.peterjack.model.dane.Pracownik;
import pl.peterjack.model.dane.PracownikUprawnienia;
import pl.peterjack.model.dane.RezultatOdpowiedz;

import com.google.gson.Gson;

public class KlientEdycja  extends HttpServlet {
	
	Log log = new LogFactoryImpl().getInstance( getClass() );

	@Override 
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		PersistenceManager pm = PMF.get().getPersistenceManager();
		Pracownik pracownik = (Pracownik) req.getSession().getAttribute("firma_pracownik");
		PracownikUprawnienia pracownikUprawnienie = null;
		if (pracownik != null && pracownik.getPracownikUprawnienia() != null
				&& pracownik.getPracownikUprawnienia().longValue() > 0) {
			pracownikUprawnienie = pm.getObjectById(PracownikUprawnienia.class,
					pracownik.getPracownikUprawnienia());
		}
		if (req.getSession().getAttribute("firma_klient") != null
				|| !(pracownik == null || pracownikUprawnienie == null || (pracownikUprawnienie
						.getDodawanieKlientow() != null && pracownikUprawnienie
						.getDodawanieKlientow().booleanValue()))) {
			req.getSession().invalidate();
			resp.setContentType("text/plain");
			resp.setStatus(resp.SC_MOVED_TEMPORARILY);
			resp.setHeader("Location", "/");
			return;
		}
		RezultatOdpowiedz result = new RezultatOdpowiedz();
		Firma firma = (Firma) req.getSession().getAttribute("firma");
	    Long id = Long.parseLong((String)req.getParameter("id")); 
	    Klient klient = pm.getObjectById(Klient.class, id);
	    // sprawdzamy login
	    if (!klient.getLogin().equals(req.getParameter("login"))) {
	    	try {
		    	String queryStr = "select from " + Klient.class.getName() + 
		    		" where login == :p1 ";
		    	List<Klient> results = (List<Klient>) pm.newQuery(queryStr).execute(req.getParameter("login"));
			    if (results != null && results.size()>0){
			    	result.setSuccess(false);
			    	result.setData( null );
			    	result.setMessage("Login juz zajety");
			    	Gson gson = new Gson();
				    resp.setCharacterEncoding("UTF-8");
			        resp.getWriter().println(gson.toJson(result));
			        return; 
			    }
		    } catch (Exception e) {
				// nie robimy nic
			}
	    }
	    // ustawiamy zmiany 
	    klient.setImie( req.getParameter("imie"));
	    klient.setNazwisko( req.getParameter("nazwisko") );
	    klient.setNazwa( req.getParameter("nazwa") );
	    klient.setAdres( req.getParameter("adres") ); 
	    klient.setMiejscowosc( req.getParameter("miejscowosc") );
	    klient.setKodPocztowy( req.getParameter("kodPocztowy") ); 
	    klient.setTelefon( req.getParameter("telefon") ); 
	    klient.setEmail( req.getParameter("email") );
	    klient.setLogin( req.getParameter("login") );
	    klient.setNip( req.getParameter("nip") ); 
	    if ( req.getParameter("haslo") != null && !"".equals(req.getParameter("haslo"))) {
	    	klient.setHaslo( req.getParameter("haslo") );
	    }
	    klient.setFirma( firma.getId() );
	    
	    
		if (!klient.getFirma().equals(firma.getId())) {
			req.getSession().invalidate();
			resp.setContentType("text/plain");
			resp.setStatus(resp.SC_MOVED_TEMPORARILY);
			resp.setHeader("Location", "/");
			return;
		}
	    
		
	    // zapisujemy
	    try {
	    	pm.makePersistent(klient);
	    	result.setSuccess(true);
	    	result.setData( klient );
        } catch(Exception e) {
        	e.printStackTrace(); 
        	result.setSuccess(false);
        } finally {
            pm.close();
        }
	    Gson gson = new Gson();
	    //resp.setContentType("application/json");
	    resp.setCharacterEncoding("UTF-8");
        resp.getWriter().println(gson.toJson(result));
	}

}	

